package org.lwd.datalink.service;

import org.lwd.datalink.domain.media.MediaMappingInfo;
import org.lwd.datalink.domain.media.MediaSourceType;

import java.util.List;
import java.util.Set;

/**
 * 介质定义 Service 接口
 *
 * @Author: weidong.lin
 * @Date: create in 2024/4/2 13:59
 */
public interface MediaService {

    /**
     * 根据ID获取映射关系
     *
     * @param mappingId
     * @return
     */
    MediaMappingInfo findMediaMappingsById(Long mappingId);

    /**
     * 清空同步映射关系
     *
     * @param taskId
     */
    void clearMediaMappingCache(Long taskId);

    /**
     * 获取某个Task下所有的Mapping配置
     *
     * @param justValid 是否只获取当前状态为有效的配置
     */
    List<MediaMappingInfo> getMediaMappingsByTask(Long taskId, boolean justValid);


    /**
     * 通过Record的namespace和mediaName,获取某个Task下,同步到指定类型数据源的mapping集合
     * 如果不存在配置,则返回一个空的List.
     *
     * @param justValid 是否只获取当前状态为有效的配置
     */
    List<MediaMappingInfo> getMediaMappingsByMediaAndTarget(Long taskId, String namespace, String name,
                                                            Set<MediaSourceType> targetSourceTypes, boolean justValid);


    /**
     * 通过Record的namespace和mediaName，获取某个Task下的MediaMapping集合
     */
    List<MediaMappingInfo> getMediaMappingsByMedia(Long taskId, String namespace, String mediaName, boolean justValid);

    /**
     * 根据sourceID查找任务ID集合
     *
     * @param mediaSourceId
     * @return
     */
    List<Long> findTaskIdsByMediaSourceId(Long mediaSourceId);
}
